package com.icerhe.springtest.mvc;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
 
public class Util {
         /**
         * 新的md5签名，首尾放secret。
         * @param secret 分配给您的APP_SECRET
         */
         public static String md5Signature(TreeMap<String, String> params, String secret) {
                 String result = null;
                 StringBuffer orgin = getBeforeSign(params, new StringBuffer(secret));
                 if (orgin == null)
                 return result;
                 orgin.append(secret);
                 try {
                         MessageDigest md = MessageDigest.getInstance("MD5");
                         result = byte2hex(md.digest(orgin.toString().getBytes("utf-8")));
                 } catch (Exception e) {
                         throw new java.lang.RuntimeException("sign error !");
                 }
             return result;
         }
         /**
         * 二行制转字符串
         */
         private static String byte2hex(byte[] b) {
                 StringBuffer hs = new StringBuffer();
                 String stmp = "";
                 for (int n = 0; n < b.length; n++) {
                         stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
                         if (stmp.length() == 1)
                                 hs.append("0").append(stmp);
                         else
                                 hs.append(stmp);
                 }
                 return hs.toString().toUpperCase();
         }
         /**
         * 添加参数的封装方法
         */
         private static StringBuffer getBeforeSign(TreeMap<String, String> params, StringBuffer orgin) {
                 if (params == null)
                         return null;
                 Map<String, String> treeMap = new TreeMap<String, String>();
                 treeMap.putAll(params);
                 Iterator<String> iter = treeMap.keySet().iterator();
                 while (iter.hasNext()) {
                         String name = (String) iter.next();
                         orgin.append(name).append(params.get(name));
                 }
                 return orgin;
         }
         /**连接到TOP服务器并获取数据*/
         public static String getResult(String urlStr, String content) {
                 URL url = null;
                 HttpURLConnection connection = null;
 
                 try {
                         url = new URL(urlStr);
                         connection = (HttpURLConnection) url.openConnection();
                         connection.setDoOutput(true);
                         connection.setDoInput(true);
                         connection.setRequestMethod("POST");
                         connection.setUseCaches(false);
                         connection.connect();
 
                         DataOutputStream out = new DataOutputStream(connection.getOutputStream());
                         out.write(content.getBytes("utf-8"));
                         out.flush();
                         out.close();
 
                         BufferedReader reader =
                         new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
                         StringBuffer buffer = new StringBuffer();
                         String line = "";
                         while ((line = reader.readLine()) != null) {
                                 buffer.append(line);
                         }
                         reader.close();
                         return buffer.toString();
                 } catch (IOException e) {
                         e.printStackTrace();
                 } finally {
                         if (connection != null) {
                                 connection.disconnect();
                         }
                 }
                 return null;
         }
}